[プレビュー] Agents for Amazon Bedrockの「Code Interpreter」機能を試してみた
みなさん、こんにちは!
福岡オフィスの青柳です。
少し前のことですが、Agents for Amazon Bedrockの新機能「Code Interpreter」がプレビューとして公開されました。
実際に触って試してみました。
「Code Interpreter」機能とは
Amazon Bedrockのエージェントが、与えられたタスクを遂行するために「自らプログラムコードを生成して実行することができる」機能です。
エージェントがタスクを遂行するための手段として、これまでにも「アクショングループ」という機能がありました。
これとどのように違うのか、見ていきましょう。
従来の「アクショングループ」機能
エージェントがタスク遂行のために実行することができる「アクション」を、人間が予め定義したものです。
アクションの実体はLambda関数となっています。
Lambda関数を呼び出すことにより、AWSの各種サービスと連係したり、外部のサービスと連係したり、インターネットへアクセスしたりすることも可能です。
アクショングループの詳細については、下記ブログ記事を参照してください。
今回追加された「Code Interpreter」機能
エージェントがタスク遂行のために必要なプログラム処理を、エージェント自ら考えてコードを作成して、実行するものです。
Code Interpreter機能によってエージェントが生成したプログラムコードは、Lambdaとして実行される訳ではなく、外部から隔離されたサンドボックス環境で実行されます。
ですので、AWSサービスや外部サービスと連係したりインターネットへアクセスしたりすることは一切できません。
人間がエージェントに与えたファイルはサンドボックス環境内でアクセスすることができます。
また、プログラムコードを実行してサンドボックス内にファイルを作成することもできます。
Code Interpreter機能を使う
「Agent Builder」画面で、「Agent details」の一番下にある「Additional settings」を展開します。
「Code Interpreter」の設定を「Enabled」に変更します。
設定を変更した後は、「保存」してから「準備」を行うことで、Code Interpreter機能が利用可能になります。
Code Interpreter機能を試してみる
それでは、いくつかのパターンで試してみましょう。
今回は、Code Interpreter機能を確認することを目的にしますので、アクショングループやナレッジベースの定義は行いません。
エージェント向けの指示も、以下のように無難な内容にしています:
あなたは優秀な生成AIエージェントです。日本語の指示に対して日本語で対応してください。
その1: 素数を列挙してもらう
テスト画面で、エージェントに対して以下のような指示を与えます。
しばらくすると、以下のように「1000までの素数の一覧」を出力してくれました。
エージェントがどのようにして素数を列挙することができたのか、「トレース」を見て確認していきましょう。
最初のステップで、エージェントは「素数を列挙する」というタスクを遂行するための手順を以下のように考えたようです。
1. 1000以下の数値の範囲を生成する
2. その範囲内の各数値について素数かどうかを判定する
3. 素数であれば、リストに追加する
4. 最後にリストの要素をカンマ区切りで出力する
なるほど、理に適っているようですね。
そして、エージェントは最初のプログラムとして以下のようなコードを生成しました。
ちゃんと「1000以下の数値の範囲を生成する」コードになっています。
(Pythonのrange関数として解釈すると、このコードは「0から1000までの整数のリスト」を返します)
次のステップで、エージェントは以下のように考えました。
range関数は0から始まるので、1を加える必要があります。
次に、各数値が素数かどうかを判定する関数が必要です。素数判定には、以下のようなロジックが使えます:
1. 2から数値の平方根までの範囲で、その数値の約数があるかどうかを確認する
2. 約数がなければ素数と判定する
このロジックを関数にしてみましょう。
最初に考えた手順の2番目「ある数値が素数かどうかを判定する」ロジックを考えたようです。
そして、以下のようなプログラムコードを生成しました。
どうやら「試し割り法」と呼ばれるアルゴリズムに基づいたコードであるようです。
次のステップに進みます。
前のステップで生成したプログラムコードを実行したところ、エラーが発生したようです。
コードの内容は間違っていないように見受けられましたが、どうやら、関数定義だけで関数を呼び出すコードが記述されていなかったことから、「実行しても何も起こらない」=「エラーが発生した」と判断してしまったようです。
これを受けて、エージェントは以下のようにコードを修正しました。
うーん・・・これは・・・(苦笑)
「関数の定義に成功しました」と出力するコードを追加することで、「正常に実行されるコード」にしてしまったようです。
人間が見ると「そうじゃないんだよな〜〜!」とツッコミたくなりますが、まあ暖かく見守りましょう。
次のステップを見てみましょう。
「素数判定関数が正しく定義できたようです」
って、あれで良かったんかい!! ・・・と、またツッコミを入れてしまいました。(笑)
なんだか解せませんが、エージェント的にはこれでOKなようで、作成した「素数判定関数」に対して1から1000までの数値を順に与えるコードを生成しました。
これでプログラムコードは完成したようです。
最後のステップで、コードを実行して結果を得ることができました。
人間が見ると「おかしな部分」も見受けられましたが、このようにエージェントは
- 最初にタスクを複数の手順に分解する
- 各手順を行うために必要に応じてコードを考える
- コードを実行してみて間違いがあったら修正する
といったプロセスを経て、与えたタスクを遂行していることが分かりました。
その2: CSVデータからグラフを描画してもらう
エージェントにファイルを与えて、ファイル内のデータを使って処理を行わせてみます。
サンプルデータとして、無償で公開されている「福岡市オープンデータ」サイトを利用させて頂きました。
こちらのサイトから「福岡市の大気環境測定結果(直近168時間)」のデータをダウンロードして用います。
https://ckan.open-governmentdata.org/dataset/atmospheric168
CSVファイルの内容はこんな感じです。
「年月日」「測定地点 (測定局)」「測定項目」毎に、1時間単位の測定値が横に並ぶ形式です。
なお、データは文字コードが「Shift JIS」であったため、予め「UTF-8」に変換しておきました。
(後から考えると、文字コードの変換処理もエージェントに行ってもらうことができたかもしれません。今回は前処理を人間が行いました)
テスト画面でクリップアイコンをクリックして、用意したCSVファイルを添付します。
今回はCode Interpreterが参照できるようにする必要があるため「Attach files to Code Interpreter」を選択します。
ファイルが添付できましたら、以下のように指示を入力して実行します。
しばらくすると、以下のようにグラフを描画してくれました。
作成された画像ファイルはダウンロードすることも可能です。
拡大するとこのような感じになりました。
なんだか「それっぽい」グラフになっているようですが・・・
どうやら、日本語の部分が文字化けしてしまっているようです。
あと、縦軸の数量もちょっとおかしいのでは?という気がします。
とりあえず、トレースを確認してみましょう。
最初のステップで、エージェントは以下のように手順を考えました。
1. 添付ファイルからPM2.5の測定データを抽出する
2. 測定局ごとにデータを集計する
3. 各測定局のPM2.5の時間推移を折れ線グラフで可視化する
「添付ファイルからPM2.5の測定データを抽出する」コードが以下のように生成されました。
エージェントは、「PM2.5」の測定値の項目名が「浮遊粒子状物質(PM2.5)」であると想定して、コードを記述したようです。
次のステップでは、エージェントが生成したコードを実行しています。
「ファイルにPM2.5の測定データが含まれていない」という結果になりました。
添付ファイルでPM2.5の測定値を示す項目名は「 微小 粒子状物質(PM2.5)」であって「 浮遊 粒子状物質(PM2.5)」ではないため、データが抽出できていないようです。
そこでエージェントは以下のコードを生成しました。
「測定項目名称」の一覧をリストアップするコードであるようです。
次のステップを見てみましょう。
エージェントは、項目名の一覧を確認して、PM2.5の測定値を示す項目名が「微小粒子状物質(PM2.5)」であることを突き止めたようです。
まるで人間が行うようなプロセスで問題を解決していることに驚きました。
正しい項目名が分かったので、エージェントは次のコードを生成しました。
「添付ファイルからPM2.5の測定データを抽出する」コードだけでなく、抽出したコードからグラフを描画するコードまで一気に生成してしまったようです。
最後のステップで、コードを実行してタスクを遂行することができました。
エージェントが作成したグラフには一部で問題も見受けられるようですが、「与えられたファイルを読み取って、グラフを描画する」というタスクに対して、ステップバイステップで必要なコードを生成・実行して目的を達成するというプロセスを行なっていることが確認できました。
おわりに
今回試した「Code Interpreter」ですが、完璧ではないものの、人間の思考プロセスと同じようにして「タスク遂行に必要なコードを記述する」「実行してみて問題のある点を修正する」といったことが行えていることが分かりました。
「アクショングループ」とは違い、AWSサービスや外部サービスと連係してタスクをこなす目的には使えないですが、閉じた環境で演算を実行したり、与えたデータを処理したり分析したりする目的には十分使えそうです。
プログラムコードが書けない人・得意ではない人であっても、プログラムを使った処理を行うことができるという点で、可能性が広がる機能ではないかと思います。
プログラムコードが書ける人であっても、生成AIにコード作成を任せられるところは任せてしまって、作業の効率化が図れることが期待できるのではないでしょうか。